下方程式碼片段全部都是擷取自 Secure Code Warrior 線上安全程式培訓平台,因為練習互動時的題目多半不會只有單一個檔案,可能涉及多個檔案、資料夾及多處地方修改,因此我的文章主要是針對最主要的區塊做修改及說明,若有不好理解的地方非常抱歉也還請見諒,也可以實際上去 Secure Code Warrior 玩玩看,搭配著互動,會更有感的學習哦~
String connectionUrl = "https://www.bankingApp.com/moneytransfer.php";
String postParams = "account_number=" + edtAccountNumber.getText().toString() + "&" + "amount=" + edtAmount.getText().toString() + "&" + "transaction_password=" + edtTransactionPassword.getText().toString() + "&" + "api_key=A4sfK4365GITkdfier577dgfkDFJKF==";
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
可以直觀地看到api_key=A4sfK4365GITkdfier577dgfkDFJKF==
"user_id=" + userId + "&" + "token=" + accessToken;
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
使用會隨時間及使用者資料更新的token取代硬編碼。
private final String key = "8w6n64J6CiPkU4atWBvoVhb7Cextl1oF";
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
硬編碼
選有
import android.security.keystore.KeyGenParameterSpec;
KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder("myKeyAlias", KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.build();
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:KeyGenParameterSpec
是 Android 用於配置和生成加密金鑰的類別,通過將金鑰存儲於 Android Keystore 中,確保金鑰不會直接暴露給應用程式本身或反編譯分析,提供更高級別的安全保護。
(!TextUtils.isEmpty(credentials)) {
cipherString = new String(AES256Cipher.encrypt(new String("dGhpc0BrZXklaXMgbm90ICUlIFZsaUQ=").getBytes(), credentials.getBytes()));
}
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
使用硬編碼
CipherSecurity secure = new CipherSecurity();
secure.createNewKeys(LoginActivity.this, alias);
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
使用 CipherSecurity
類別來創建新的加密金鑰,他一樣會將金鑰存儲於 Android Keystore 中,確保金鑰的隱私性。